/*
x * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ar.edu.utn.frgp.banco.dao.Implements;

import ar.edu.utn.frgp.banco.domain.Cliente;

import ar.edu.utn.frgp.banco.dao.connection.*;
import ar.edu.utn.frgp.banco.dao.Interfaces.IntClientes;
import ar.edu.utn.frgp.banco.exceptions.DataAccessException;
import ar.edu.utn.frgp.banco.dao.Implements.ImpCuenta; 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author eescobar
 */
public class ImpClientes implements IntClientes {


    @Override
    public void ModiCliente(Cliente cliente) throws DataAccessException {
		PreparedStatement ps = null;
		ImpConectionHandler handler = new ImpConectionHandler();
		Connection cn = handler.getConnection();
		
		try {
			
			StringBuilder stringBuilder = new StringBuilder();
			stringBuilder.append("UPDATE Clientes set ");
			stringBuilder.append("DNI = ?, ");
			stringBuilder.append("Clave = ?, ");
			stringBuilder.append("Nombre = ?, ");
			stringBuilder.append("Apellido = ?, ");
			stringBuilder.append("Direccion = ?, ");
			stringBuilder.append("Ciudad = ?, ");
			stringBuilder.append("Activo = ?, ");
			stringBuilder.append("Email = ? ");
			stringBuilder.append("WHERE id_cliente = ?");
			
			ps = cn.prepareStatement(stringBuilder.toString());
			
			ps.setString(1, cliente.getDNI());
			ps.setString(2, cliente.getClave());
			ps.setString(3, cliente.getNombre());
			ps.setString(4, cliente.getApellido());
			ps.setString(5, cliente.getDireccion());
			ps.setString(6, cliente.getCiudad());
			ps.setString(7, cliente.getActivo());
			ps.setString(8, cliente.getEmail());
			ps.setInt(9, cliente.getID_Cliente());
			ps.executeUpdate();
			
		} catch (SQLException e) {
			throw new DataAccessException(e);
		} finally {
			handler.closeResources(ps, cn);
		}
    }

    @Override
    public Cliente ObtenerCliente(Integer id_cliente) throws DataAccessException {
		PreparedStatement ps = null;
		ResultSet rs = null;
		
		ImpConectionHandler handler = new ImpConectionHandler();
		Connection cn = handler.getConnection();
		Cliente cl = null;
		
		try {
			
			StringBuilder stringBuilder = new StringBuilder();
			stringBuilder.append("Select id_cliente, DNI, ");
			stringBuilder.append("Clave, Nombre, Apellido, ");
			stringBuilder.append("Direccion, Ciudad, Activo, Email ");
			stringBuilder.append("from clientes ");
			stringBuilder.append("WHERE id_cliente = ?");

			ps = cn.prepareStatement(stringBuilder.toString());
			ps.setInt(1, id_cliente);
			
			rs = ps.executeQuery();
			
			while (rs.next()) {
				cl = new Cliente();
				
				cl.setID_Cliente(rs.getInt("id_cliente"));
				cl.setDNI(rs.getString("dni"));
				cl.setNombre(rs.getString("nombre"));
				cl.setApellido(rs.getString("apellido"));
				cl.setDireccion(rs.getString("direccion"));
				cl.setCiudad(rs.getString("ciudad"));
				cl.setActivo(rs.getString("activo"));
				cl.setEmail(rs.getString("email"));
				ImpCuenta ImplementeCuenta = new ImpCuenta();
				cl.setCuentas(ImplementeCuenta.TraerCuentas(cl.getID_Cliente()));
				
			}
			
		} catch (SQLException e) {
			throw new DataAccessException(e);
		} finally {
			handler.closeResources(rs, ps, cn);
		}
		
		return cl;
	}

    @Override
    public Cliente ObtenerCliente(String dni) throws DataAccessException {
		PreparedStatement ps = null;
		ResultSet rs = null;
		
		ImpConectionHandler handler = new ImpConectionHandler();
		Cliente cl = null;
		Connection cn = handler.getConnection();
		
		try {
			
			StringBuilder stringBuilder = new StringBuilder();
			stringBuilder.append("Select id_cliente, DNI, ");
			stringBuilder.append("Clave, Nombre, Apellido, ");
			stringBuilder.append("Direccion, Ciudad, Activo, Email ");
			stringBuilder.append("from clientes ");
			stringBuilder.append("WHERE DNI = ? ");

			//System.out.println(dni);
//dsdf
			ps = cn.prepareStatement(stringBuilder.toString());
			ps.setString(1, dni);

		
			rs = ps.executeQuery();
			
			while (rs.next()) {
				cl = new Cliente();
				
				cl.setID_Cliente(rs.getInt("id_cliente"));
				cl.setDNI(rs.getString("dni"));
				cl.setNombre(rs.getString("nombre"));
				cl.setApellido(rs.getString("apellido"));
				cl.setDireccion(rs.getString("direccion"));
				cl.setCiudad(rs.getString("ciudad"));
				cl.setActivo(rs.getString("activo"));
				cl.setEmail(rs.getString("email"));
				cl.setClave(rs.getString("clave"));
				ImpCuenta ImplementeCuenta = new ImpCuenta();
				cl.setCuentas(ImplementeCuenta.TraerCuentas(cl.getID_Cliente()));

			}
			
		} catch (SQLException e) {
			throw new DataAccessException(e);
		} finally {
			handler.closeResources(rs, ps, cn);
		}
		return cl;
    }
}
